package datastructure.queue;

import datastructure.heap.MaxHeap;

/**
 * @Description: 自己封装的优先级队列, 基于最大堆实现
 * @author: Yang Qiang
 * @create: 2021-12-19 16:55
 */
public class MyPriorityQueue<E extends Comparable<E>> implements Queue<E>{
    // 我们使用最大堆来实现优先级队列
    private MaxHeap<E> maxHeap;

    /**
     * 构造函数, 使用最大堆来初始化优先级队列
     * @param maxHeap
     */
    public MyPriorityQueue(MaxHeap<E> maxHeap) {
        this.maxHeap = maxHeap;
    }

    /**
     * 空参
     */
    public MyPriorityQueue() {
        maxHeap = new MaxHeap<>();
    }

    /**
     * 队列入队
     * @param e
     */
    @Override
    public void enQueue(E e) {
        maxHeap.add(e);
    }

    /**
     * 队列出队
     * @return
     */
    @Override
    public E delQueue() {
        return maxHeap.extractMax();
    }

    /**
     * 获得队首元素
     * @return
     */
    @Override
    public E getFront() {
        return maxHeap.findMax();
    }

    /**
     * 获得队列的长度
     * @return
     */
    @Override
    public int getSize() {
        return maxHeap.size();
    }

    /**
     * 判断队列是否为null
     * @return
     */
    @Override
    public boolean isEmpty() {
        return maxHeap.isEmpty();
    }

}
